import { defineStore } from "pinia"
import { useContentStore } from "~/composables/stores/useContentStore.js"
import templateTypes from "~/data/forms/templates/types.json"
import industryTypes from "~/data/forms/templates/industries.json"

const templatesEndpoint = "templates"
export const useTemplatesStore = defineStore("templates", () => {
  const contentStore = useContentStore("slug")

  const allLoaded = ref(false)
  const industries = ref(new Map())
  const types = ref(new Map())

  const getTemplateTypes = (slugs) => {
    if (!slugs) return []
    return slugs
      .map((slug) => {
        return types.value.get(slug)
      })
      .filter((item) => item !== undefined)
  }
  const getTemplateIndustries = (slugs) => {
    if (!slugs) return []
    return slugs
      .map((slug) => {
        return industries.value.get(slug)
      })
      .filter((item) => item !== undefined)
  }

  const initTypesAndIndustries = () => {
    if (types.value.size === 0) {
      types.value = new Map(Object.entries(templateTypes))
    }
    if (industries.value.size === 0) {
      industries.value = new Map(Object.entries(industryTypes))
    }
  }

  return {
    ...contentStore,
    industries,
    types,
    allLoaded,
    getTemplateTypes,
    getTemplateIndustries,
    initTypesAndIndustries,
  }
})

export const fetchTemplate = (slug, options = {}) => {
  return useOpnApi(templatesEndpoint + "/" + slug, options)
}

export const fetchAllTemplates = (options = {}) => {
  return useOpnApi(templatesEndpoint, options)
}

export const loadAllTemplates = async (store, options = {}) => {
  if (!store.allLoaded) {
    store.startLoading()
    store.initTypesAndIndustries()
    const { data } = await fetchAllTemplates(options)
    store.set(data.value)
    store.stopLoading()
    store.allLoaded = true
  }
}
